請地鼠幫我查查看我的 ip 吧... 👈 本篇有夠廢
ip 就是外部網路識別你的位置,由一串數字組合 bla bla 的,自己去查啦, 我懶得解釋 XD
package main
import (
"fmt"
"io"
"net/http"
)
func main() {
url := "http://orange.tw/"
res, err := http.Get(url)
content, err := io.ReadAll(res.Body)
if err != nil {
fmt.Println("Request is Error")
fmt.Println(err)
}
fmt.Println(string(content))
}
還是解釋一下程式碼好了 👈 想要水一下字數到 300 字以上
主要其實就是這一行
http.Get(url)
所以...你懂得,你也可以寫一個讓地鼠幫你送表單之類的,改成
http.Post(url)
這樣就好...
然後讓我們來看看 Golang 文件怎麼寫...: https://pkg.go.dev/net/http#Get
func Get ¶
func Get(url string) (resp *Response, err error)
Get issues a GET to the specified URL. If the response is one of the following redirect codes, Get follows the redirect, up to a maximum of 10 redirects...
好啦,後面請自己在官網上看,總之就是拿來作送GET 請求
的方法...
拿到了response 就是要去讀它,我們用到io
這個 lib,他讀懂後丟到content
這個變數,但讓我們再來看一下 golang 的文件:https://pkg.go.dev/io#ReadAll
func ReadAll ¶
func ReadAll(r Reader) ([]byte, error)
ReadAll reads from r until an error or EOF and returns the data it read. A successful call returns err == nil, not err == EOF. Because ReadAll is defined to read from src until EOF, it does not treat an EOF from Read as an error to be reported.
有沒有發現他的回傳是[]byte
...
我們肉眼能識別的只有文字, byte 我們可是看不懂的呢...除非...你不是人?!
所以我們才要
string(content)
至於那段
if err != nil {
fmt.Println("Request is Error")
fmt.Println(err)
}
其實就是一種 Error handing 手段...如果你能百分之兩百確認程式不會有錯誤發生...那你大可以刪掉這一段(❌ 亂教 哈)
這個時候就要討論一下 Golang 的錯誤處理了,我覺得和其他語言不太一樣,如果你有寫過其他語言,大部分語言長以下這個樣子
try {
...
} catch {
...
}
但地鼠先生比較特別一點,他就是要與眾不同,要和大象、蟒蛇、咖啡分道揚鑣,於是就出現了這種要另外宣告一個 err 變數去接 error, 然後搞一個if
去做處理...
之前在 Golang 社群也有討論過這種處理範式,反而認為才是符合「無暇程式碼」...各位看官,你們覺得呢?
好啦,大概這樣的解釋差不多了吧...應該水過三百字以上了吧?!
Golang 要做爬蟲也不會輸給 Python 呢!
就是這麼簡單!